package job.work.service.system.service;

import job.work.domain.response.PageResult;
import job.work.domain.response.ResponseResult;
import job.work.domain.system.entity.pojo.DecMenu;
import job.work.domain.system.request.MenuPageRequest;

import java.util.List;

/**
 * @author zzy
 * @Classname DecMenuService
 * @Date 2020/9/24 15:21
 * @Created by Administrator
 */
public interface DecMenuService {

    /**
     * 分页查询所有菜单
     *
     * @param resultRequest 分页参数
     * @return 分页后的数据
     */
    ResponseResult<PageResult<DecMenu>> findPageMenu(MenuPageRequest resultRequest);

    /**
     * 查询所有菜单
     * @return 返回树状菜单
     */
    ResponseResult findAllMenu();

    /**
     * 根据每一角色生成菜单结构
     *
     * @param roleId 角色ID
     * @return 菜单集合
     */
    List<DecMenu> findRoleMenu(Long roleId);

    /**
     * 获取组装好的菜单
     * 以树的形式显示
     * @param menusRoot menusRoot
     * @return List
     */
    List<DecMenu> getMenuTree(List<DecMenu> menusRoot);

    /**
     * 保存/修改 菜单节点
     *
     * @param decMenu 菜单
     * @return ResponseResult
     */
    ResponseResult saveMenu(DecMenu decMenu);

    /**
     * 删除菜单
     *
     * @param id 根据ID删除菜单
     * @return ResponseResult
     */
    ResponseResult delectMenu(Long id);

    /**
     * 获取指定菜单的根节点
     *
     * @param id        根据ID查询当前菜单的节点
     * @param menusRoot 菜单集合
     * @return 封装好的菜单集合
     */
    List<DecMenu> getRootTree(Long id, List<DecMenu> menusRoot);

    /**
     * 获取指定菜单的根节点下的子菜单
     *
     * @param id        菜单ID
     * @param menusRoot 菜单集合
     * @return 封装好的菜单集合
     */
    List<DecMenu> findDeleteChilden(Long id, List<DecMenu> menusRoot);
}
